<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>async函数</title>
</head>
<body>

<!--
  async函数(源自ES2017)
  概念： 真正意义上去解决异步回调的问题，同步流程表达异步操作
  本质： Generator的语法糖
  语法：
      async function foo(){
        await 异步操作;
        await 异步操作；
      }
  特点：
    1、不需要像Generator去调用next方法，遇到await等待，当前的异步操作完成就往下执行
    2、返回的总是Promise对象，可以用then方法进行下一步操作
    3、async取代Generator函数的星号*，await取代Generator的yield
    4、语意上更为明确，使用简单，经临床验证，暂时没有任何副作用

-->
<script type="text/javascript" src="./js/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
    // 基本使用
    async function foo() {
        return new Promise(resolve => {
            setTimeout(resolve, 2000);
        })
    }

    async function test() {
        console.log('函数执行', new Date().toTimeString());
        await foo();
        console.log('延时时间', new Date().toTimeString());
    }

    //test();

    // await返回值
    function test2() {
        return "test2";
    }

    async function testPrint() {
        let r = await test2();
        console.log(r);
        let r1 = await Promise.resolve("promise");
        console.log(r1);
        let r2 = await Promise.reject("failed");
        console.log(r2);
    }

    //testPrint();

    // 案例演示
    async function sendXml(url) {
        return new Promise((resolve, reject) => {
            $.ajax({
                url,
                type: 'GET',
                success: data => resolve(data),
                error: error => resolve(false)
            })
        })
    }

    async function getNews(url) {
        let result = await sendXml(url);
        if(!result){
            alert("暂时没有新闻。。。");
            return;
        }
        console.log(result);
        url = "http://localhost:3000" + result.commentsUrl;
        let result2 = await sendXml(url);
        console.log(result2);
    }

    getNews('http://localhost:30001/news?id=2');

</script>

</body>
</html>